package com.xiangge.inner;

public class InnerClassDemo {
    public static void main(String[] args) {
        // 在测试方法中调用内部类的成员属性
        // 先调外部对象，再调内部对象
        Outer.Inner inner = new Outer().new Inner();
        System.out.println(inner.innerNum);
        System.out.println(inner.num);
        inner.innerMethod();
        inner.method();

        // 简单的直接调用外部类的成员属性
        Outer outer = new Outer();
        System.out.println(outer.num);
        System.out.println(outer.outerNum);
        outer.method();
        outer.outerMethod();

        // 调用静态的内部类直接使用类名调用
        Outer.Inner2 inner2 = new Outer.Inner2();
        inner2.method();
        System.out.println(inner2.num);
        System.out.println(inner2.innerNum);
        inner2.innerMethod();
    }
}
// 创建一个新的类
class Outer{
    public int num = 10;
    public int outerNum = 20;
    public void method(){
        System.out.println("外部类method");
    }
    public void outerMethod(){
        System.out.println("外部类outMethod");
    }

    // 创建一个普通成员内部类
    class Inner{
        public int num = 100;
        public int innerNum = 200;
        public void method(){
            System.out.println("内部类method");
        }
        public void innerMethod(){
            System.out.println("内部类innerMethod");
        }
    }

    // 创建一个静态的内部类
    static class Inner2{
        public int num = 100;
        public int innerNum = 200;
        public void method(){
            System.out.println("内部类method");
        }
        public void innerMethod(){
            System.out.println("内部类innerMethod");
        }
    }
}
